package com.example.ai.service.Impl;


import com.example.ai.common.PageResult;
import com.example.ai.entity.Good;
import com.example.ai.mapper.GoodMapper;
import com.example.ai.service.goodService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 商品业务逻辑实现类
 * 处理商品信息的核心业务逻辑和事务管理
 *
 * @author czwa
 */
@Service
@Slf4j
public class goodServiceImpl implements goodService {
    @Autowired
    private GoodMapper goodMapper;

    /**
     * 分页条件查询商品列表
     *
     * @param good 查询条件封装对象
     * @return 商品列表
     */
    @Override
    public List<Good> getAllGoods(Good good) {
        return goodMapper.getAllGood(good);
    }

    /**
     * 新增商品（带事务管理）
     * 1. 插入商品基本信息
     * 2. 检查供应商是否存在，不存在则新增供应商
     * 3. 建立商品与供应商的关联关系
     *
     * @param good 商品实体对象
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void add(Good good) {
        // 插入商品基本信息
        goodMapper.add(good);

        // 检查供应商是否首次出现
        if(goodMapper.supplyIsFirstAppear(good.getSupplyName()) == 0) {
            // 新增供应商
            goodMapper.addSupply(good.getSupplyName());
        }

        // 获取商品ID和供应商ID
        int goodId = goodMapper.getId(good.getName());
        int supplyId = goodMapper.getSupplyId(good.getSupplyName());

        // 建立商品-供应商关联关系
        goodMapper.addGoodSupply(goodId, supplyId);
    }

    /**
     * 根据ID查询商品详情
     *
     * @param id 商品ID
     * @return 商品实体对象（包含供应商信息）
     */
    @Override
    public Good getById(int id) {
        return goodMapper.getById(id);
    }

    /**
     * 更新商品信息（带供应商关联处理）
     * 1. 更新商品基本信息
     * 2. 检查供应商是否存在，不存在则新增供应商
     * 3. 建立商品与供应商的关联关系
     *
     * @param good 商品实体对象
     */
    @Override
    public void update(Good good) {
        // 更新商品基本信息
        goodMapper.update(good);

        // 检查供应商是否首次出现
        if(goodMapper.supplyIsFirstAppear(good.getSupplyName()) == 0) {
            // 新增供应商
            goodMapper.addSupply(good.getSupplyName());
        }

        // 获取商品ID和供应商ID
        int goodId = goodMapper.getId(good.getName());
        int supplyId = goodMapper.getSupplyId(good.getSupplyName());

        // 建立商品-供应商关联关系
        goodMapper.addGoodSupply(goodId, supplyId);
    }

    /**
     * 删除商品（逻辑删除）
     * 1. 删除商品基本信息
     * 2. 删除商品与供应商的关联关系
     *
     * @param id 商品ID
     */
    @Override
    public void delete(int id) {
        // 删除商品-供应商关联关系
        goodMapper.deleteGoodToSupply(id);

        // 删除商品基本信息
        goodMapper.delete(id);
    }

    /**
     * 获取所有商品列表（不含供应商信息）
     *
     * @return 商品列表
     */
    @Override
    public List<Good> getAllGood() {
        return goodMapper.getAll();
    }
}